package com.ruoyi.common.utils;

import com.ruoyi.common.core.domain.entity.DictData;

import java.util.List;
import java.util.Map;

/**
 * 字典工具类
 * 
 * @author ruoyi
 */
public class DictUtils
{
    /**
     * 分隔符
     */
    private static final String SEPARATOR = ",";

    /**
     * 保存字典数据，key=字典类型值+#+字典数据值
     */
    private static Map<String, DictData> dataMap=null;
    /**
     * 保存类型的字典数据列表，key=字典类型值
     */
    private static Map<String, List<DictData>> typeMap=null;

    /**
     * 设置字典缓存
     * 
     */
    public static void setDictCache(Map<String, DictData> dataMap,Map<String, List<DictData>> typeMap)
    {
        DictUtils.dataMap=dataMap;
        DictUtils.typeMap=typeMap;
    }

    /**
     * 获取字典缓存
     * 
     * @param dictType 字典类型值
     * @return dictDatas 字典数据列表
     */
    public static List<DictData> getDictCache(String dictType)
    {
        return typeMap.get(dictType);
    }

    /**
     * 根据字典类型和字典值获取字典标签
     * 
     * @param dictType 字典类型
     * @param dictValue 字典值
     * @return 字典标签
     */
    public static String getDictLabel(String dictType, String dictValue)
    {
        DictData data=dataMap.get(dictType+"#"+dictValue);
        if(data!=null){
            return data.getDictLabel();
        }
        return null;
    }

    /**
     * 根据字典类型和字典标签获取字典值
     * 
     * @param dictType 字典类型
     * @param dictLabel 字典标签
     * @return 字典值
     */
    public static String getDictValue(String dictType, String dictLabel)
    {
        List<DictData> dataList=typeMap.get(dictType);
        if(dataList==null){
            return null;
        }
        for(DictData data:dataList){
            if(data.getDictLabel().equals(dictLabel)){
                return data.getDictValue();
            }
        }
        return null;
    }
    /**
     * 根据字典类型和字典标签获取字典值
     *
     * @param dictType 字典类型
     * @param dictLabel 字典标签
     * @return 字典值
     */
    public static String getDictValue(String dictType, String dictLabel, String separator)
    {
        String[] dictLabels=dictLabel.split(separator);
        String values="";
        for(String label:dictLabels){
            String value=getDictValue(dictType,label);
            if(value!=null){
                values=values+value+separator;
            }
        }
        if(values.length()>0){
            values=values.substring(0,values.length()-1);
        }
        return values;
    }

    /**
     * 根据字典类型和字典值获取字典标签
     * 
     * @param dictType 字典类型
     * @param dictValue 字典值
     * @param separator 分隔符
     * @return 字典标签
     */
    public static String getDictLabel(String dictType, String dictValue, String separator)
    {
        String[] dictValues=dictValue.split(separator);
        String labels="";
        for(String value:dictValues){
            String label=getDictLabel(dictType,value);
            if(label!=null){
                labels=labels+value+separator;
            }
        }
        if(labels.length()>0){
            labels=labels.substring(0,labels.length()-1);
        }
        return labels;
    }

}
